package cn.le.string;

import java.util.Arrays;

/**
 * Created by admin on 2017/5/2.
 * String对象是可以变的,String类中每个看起来会修改String值的方法,
 * 实际上都是创建了一个全新的String对象,以包含修改后的字符串内存,而最初的String对象则丝毫未动
 *
 * String用+号进行拼接,在普通的代码中,jvm会优化成stringbuilder.append()进行添加,所有没什么性能缺陷,只是不好看。
 * 但是如果把string + 写在了循环里面,那么就会创建很多个stringbuilder,从而影响性能
 * append()里面用到了+号拼接,也将会创建新的stringbuilder
 *
 */
public class Immutable {

    public static void main(String[] args) {

        String q = "howdy.xx";
        StringBuffer sb = new StringBuffer("dads");
        System.out.println(q);
        String qq = upcase(q,sb);
        System.out.println(qq);
        System.out.println(q);

        System.out.println(sb);

        String a = q;
        a += "bb";
        System.out.println(a);
        System.out.println(q);

        int[] array = new int[]{1,2};
        test(array);


        System.out.println(q.endsWith(".xx"));//判断后缀是否为.xx
        System.out.println(q.startsWith("h"));//判断是否以h开头


        System.out.println("-123".matches("-?\\d+"));//验证是否满足此正则
        System.out.println(Arrays.toString(q.split("\\.")));//按满足此正则的字符进行分割数组,匹配的部分将丢失

        String s = "dsafsdfff";
        System.out.println(s.replaceFirst("f\\w+","located"));//替换满足此正则的字符


        System.out.println(String.format("%s,%s",q,s));//可以想c++那样按格式输出，返回新的字符串
        //d:整数型（十进制） c:Unicode字符 b:boolean值 s:String f:浮点数(十进制)
        //e:浮点数(科学计数) x:整数(十六进制) h:散列码(十六进制) %:字段"%"

    }

    public static String upcase(String s,StringBuffer sb)
    {
        sb.append("打");
        return s.toUpperCase();
    }



    public static void test(Object obj)
    {
        System.out.println(obj);
    }
    public static void test(Object[] obj)
    {
        System.out.println(obj);
    }





}

















